package com.xintoucloud.pbs.model;

import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

public class ExcelUtil {

	 public static HSSFWorkbook createWorkBook(List<Map<String, Object>> summarylist,List<Map<String, Object>> list, List<String[]> keysList, List<String[]> colsList) { 
		 //TODO:keysList colsList的第0个为汇总信息  第1个为漏洞详细信息
		 // 创建excel工作簿
		 HSSFWorkbook wb = new HSSFWorkbook(); 
		 // 创建sheet（页），用于展示汇总情况
		 HSSFSheet summarySheet = wb.createSheet(summarylist.get(0).get("summarySheet").toString()); 
		 // 创建sheet（页），用于展示漏洞信息
		 HSSFSheet sheet = wb.createSheet(list.get(0).get("sheetName").toString()); 
		 //分别为汇总表信息和漏洞详细信息 
		 String[] keys = keysList.get(1); String[] columnNames = colsList.get(1); 
		 // 手动设置列宽。第一个参数表示要为第几列设；，第二个参数表示列的宽度，n为列高的像素数。 
		 for (int i = 0; i < keys.length; i++) { 
			 sheet.setColumnWidth((short) i, (short) (50 * 200)); 
		 } 
		 String[] summaryKey = keysList.get(0); 
		 String[] summaryCol = colsList.get(0); 
		 for (int i = 0; i < summaryKey.length; i++) { 
			 summarySheet.setColumnWidth((short) i, (short) (50 * 200)); 
		 } 
		 // 创建两种单元格格式 
		 HSSFCellStyle cs = wb.createCellStyle(); 
		 HSSFCellStyle cs2 = wb.createCellStyle(); 
		 // 创建两种字体 
		 HSSFFont f = wb.createFont(); 
		 HSSFFont f2 = wb.createFont(); 
		 // 创建第一种字体样式（用于列名） 
		 f.setFontHeightInPoints((short) 10); 
		 f.setColor(HSSFColor.BLUE_GREY.index); 
		 f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 
		 // 创建第二种字体样式（用于值） 
		 f2.setFontHeightInPoints((short) 10); 
		 f2.setColor(HSSFColor.BLACK.index); 
		 // 设置第一种单元格的样式（用于列名） 
		 cs.setFont(f); 
		 cs.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
		 cs.setBorderRight(HSSFCellStyle.BORDER_THIN); 
		 cs.setBorderTop(HSSFCellStyle.BORDER_THIN); 
		 cs.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
		 cs.setAlignment(HSSFCellStyle.ALIGN_CENTER); 
		 // 设置第二种单元格的样式（用于值） 
		 cs2.setFont(f2); 
		 cs2.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
		 cs2.setBorderRight(HSSFCellStyle.BORDER_THIN); 
		 cs2.setBorderTop(HSSFCellStyle.BORDER_THIN); 
		 cs2.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
		 cs2.setAlignment(HSSFCellStyle.ALIGN_CENTER); 
		 //TODO:summarySheet用于显示汇总信息，漏洞名 个数 等级 
		 if (list != null) { 
			 //创建标题行 
			 HSSFRow titleRow = summarySheet.createRow(0); 
			 for (int i = 0; i < summaryCol.length; i++) { 
				 HSSFCell cell = titleRow.createCell((short) i);
				 //创建数据列 
				 cell.setCellValue(columnNames[i]);
				 //给单元格赋值 
				 cell.setCellStyle(cs); 
			 } 
			 //设置每行每列的值 
			 for (short i = 1; i < summarylist.size(); i++) { 
				 // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的 
				 // 创建一行，在页sheet上
				 HSSFRow dataRow = summarySheet.createRow(i);
				 //创建数据行 // 在row行上创建一个方格 
				 for (short j = 0; j < summaryKey.length; j++) { 
					 HSSFCell cell = dataRow.createCell(j); 
					 cell.setCellValue(summarylist.get(i).get(keys[j]) == null ? " " : summarylist.get(i).get(summaryKey[j]).toString()); 
					 cell.setCellStyle(cs2); 
					 } 
				 } 
			 } 
		 //以下代码为创建第二个sheet的信息 
		 if (list != null) { 
			 //创建标题行 
			 HSSFRow titleRow = sheet.createRow(0); 
			 for (int i = 0; i < columnNames.length; i++) { 
				 HSSFCell cell = titleRow.createCell((short) i);
				 //创建数据列 
				 cell.setCellValue(columnNames[i]);
				 //给单元格赋值 
				 cell.setCellStyle(cs); 
			 } 
			 //设置每行每列的值 
			 for (short i = 1; i < list.size(); i++) { 
				 // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的 
				 // 创建一行，在页sheet上
				 HSSFRow dataRow = sheet.createRow(i);
				 //创建数据行 // 在row行上创建一个方格 
				 for (short j = 0; j < keys.length; j++) { 
					 HSSFCell cell = dataRow.createCell(j); 
					 cell.setCellValue(list.get(i).get(keys[j]) == null ? " " : list.get(i).get(keys[j]).toString()); 
					 cell.setCellStyle(cs2); 
					 } 
				 } 
			 } 
		 return wb; 
		 } 
	}

		
